#include "subtract_tiling.h"
#include "register/op_def_registry.h"

namespace optiling {
// 定义分块参数（示例：块大小16，分块数8）
const uint32_t BLOCK_DIM = 16;
const uint32_t TILE_COUNT = 8;

// 减法算子分块策略函数
ge::graphStatus TilingFunc(ge::TilingContext* context) {
    TilingData tiling;
    // 获取第一个输入的形状长度
    uint32_t inputLength = context->GetInputShape(0)->GetOriginShape().GetShapeSize();
    context->SetBlockDim(BLOCK_DIM);  // 设置块大小
    
    // 填充分块数据
    tiling.set_inputLength(inputLength);
    tiling.set_tileCount(TILE_COUNT);
    tiling.SaveToBuffer(
        context->GetRawTilingData()->GetData(), 
        context->GetRawTilingData()->GetCapacity()
    );
    context->GetRawTilingData()->SetDataSize(tiling.GetDataSize());
    
    // 初始化工作空间（示例：无额外空间需求）
    size_t* workspaceSizes = context->GetWorkspaceSizes();
    workspaceSizes[0] = 0;
    
    return ge::GRAPH_SUCCESS;
}

// 注册分块策略（将TilingFunc与减法算子绑定）
static bool RegisterTiling() {
    ge::TilingRegistry::GetInstance().Register("Subtract", TilingFunc);
    return true;
}
// 强制编译时执行注册
static bool g_reg = RegisterTiling();
} // namespace optiling